Alloy 6
Nov 4, 2021
Alloyのvarを使うことで時間の経過を表現できるようになった
以前のversionでも前後の状態を個々に宣言することで表現できていたが、より直観的に書けるようになった
visualizerでもその表現が見やすくなった
Release Alloytools 6.0.0 · AlloyTools/org.alloytools.alloy · GitHub
変更点
univやidenは全てのatomに対する云々だが、これもmutableなものになった
Alloyのvar
動的な変数を宣言
Alloyのs'という変数名
sという基準点の直後を表す
例
code:例(alloy)
pred turnOn {
Lamp.state = Off && Lamp.state' = On
}
Lamp.stateがOffからOnになったということを書いてる
新しい予約語
table:演算子
未来演算子 過去演算子
Alloyのalways Alloyのhistorically
Alloyのeventually Alloyのonce
Alloyのafter Alloyのbefore
Alloyのuntil Alloyのsince
Alloyのreleased Alloyのtriggered
Alloyのalways
https://zenn.dev/y_taka_23/articles/alloy-mutable-fields#mutable-field-を用いた記述
always P
基準点から後の任意の状態においてPが成り立つ
allのmutable版というイメージ
Alloyのeventually
eventually P
基準点以降、最低でも 1 つの状態でPが成り立つ
someのmutable版というイメージ
Alloyのafter
基準点の直後の状態で成り立つ
https://zenn.dev/y_taka_23/articles/alloy-mutable-fields#after
Alloyのuntil
P until Q
https://zenn.dev/y_taka_23/articles/alloy-mutable-fields#until
その状態以降の少なくとも 1 つの状態で Q が成り立ち、かつそこまでの間ずっと P が成り立つ
enabled
event
invariant
modifies
Alloyのreleases
P releases Q
https://zenn.dev/y_taka_23/articles/alloy-mutable-fields#releases
gpt-4.icon
これらの条件は、システムの振る舞いが特定の条件下でどのように進展するかをモデル化する際に役立ちます。例えば、安全性の保証や、特定のイベントが発生するまでの一時的な条件をモデル化する際に使用できます。
具体的な使用例を考えると、例えば「システムが特定の状態に達するまで、別の安全条件が常に成立している必要がある」という状況を表現する際にreleasesを使用することができます。このような場合、Pがその特定の状態を表し、Qが安全条件を表します。
steps
https://alloytools.org/alloy6.html#:~:text=usual%20Alloy%20semantics.-,Time%20horizon,-Analyses%20proceed%20as
探索時のscopeとして使用する?
var
;
P ; Q
https://zenn.dev/y_taka_23/articles/alloy-mutable-fields#%3B
その状態で P が成り立ち、かつすぐ次の状態で Q が成り立つ
なにかのエイリアスかな?
二項演算子版のafter的な
Visualizer
https://gyazo.com/58a4c4b9ca3de7634c73e6a26b09c63e
New Config
従来のNewと同じようなもの
他の例を探索する
New Trace
同instanceで、今表示されているものとは別の時間発展の例を探索
異なる未来
New Init
別の初期状態の例を探索
New Configとの違いがわからない #??
New Fork
現在表示している状態から、それ以外の遷移先があるかどうかを探索
なんか押すタイミングある?思った通りの挙動にならないことがあるなmrsekut.icon
参考
Alloy 6 の新機能 Mutable Field と線形時相論理
https://www.hillelwayne.com/post/alloy6/
https://haslab.github.io/formal-software-design/
https://alloytools.discourse.group/t/alloy-6-vs-tla/329